package day06.Lambda;

import org.junit.Test;

import java.io.PrintStream;
import java.util.function.Consumer;

/*
*   函数式接口（只有一个抽象方法）
* */

public class MyFntInterfaceImpl implements MyFntInterface{
    @Override
    public int compare(String a, String b) {
        return a.compareTo(b);
    }

    @Test
    public void test(){
        /*
        *   通过多态调用compare
        * */
        //    接口  对象1  =  new  实现类
        MyFntInterface myFntInterface= new MyFntInterfaceImpl();
        int num= myFntInterface.compare("adsde","fferv");
        System.out.println("num: "+num);

        /*
        *   通过语法糖调用实例方法
        * */
//        接口  对象2  =  对象::实例方法
        MyFntInterface myFntInterface1= myFntInterface::compare;
        int num1= myFntInterface1.compare("a","b");
        System.out.println("num1: "+num1);
    }


    public interface InnerInterface {
        public void shouye(String a);
    }

    @Test
    public void test2(){
        PrintStream printStream= System.out;
        InnerInterface innerInterface= printStream::println;
        innerInterface.shouye("自己方法的输出内容");
    }


    @Test
    public void test3(){
        PrintStream printStream= System.out;
//        Consumer<String> 是 JDK 自带的函数式接口
        Consumer<String> consumer=printStream::println;
//        编译器看到 printStream::println 的 方法引用，会生成一个 Lambda 对象
        consumer.accept("season");

//        这次方法引用的 目标对象 是 静态字段常量 System.out，因此生成的 Lambda 更加简单
        Consumer<Integer> consumer1=System.out::println;
//        调用 consumer1.accept(123456) 等价于 System.out.println(123456)
        consumer1.accept(123456);
    }
}
